#include <iostream>
#include <vector>
using namespace std;
 
int n = 0, res = 0;
 
void dfs(vector<int>& arr, int pos, vector<bool>& vis)
{
    if(pos == n + 1) // 找到一个合法方案
    {
        ++res;
        return;
    }
    for(int i = 1; i <= n; ++i)
    {
        if(vis[i] == true) // 当前i已经放过了，剪枝
            continue;
        if(vis[arr[i]] == true) // 当前i的诉求已经放过了，剪枝
            return;
        vis[i] = true; // 放上i
        dfs(arr, pos + 1, vis);
        vis[i] = false; // 回溯
    }
}
 
int main()
{
    cin >> n;
    vector<int> arr(n + 1);
    vector<bool> vis(n + 1);
    for(int i = 1; i <= n; ++i)
    {
        cin >> arr[i];
    }
    dfs(arr, 1, vis);
    cout << res << endl;
    return 0;
}